#include <bits/stdc++.h>
using namespace std;
//堆+贪心，一直保持使用不舒适度最小的口罩即可
// int main()
// {
//     int n,k;cin>>n>>k;
//     vector<int> ret(n);
//     int sum=0,count=0;
//     priority_queue<int,vector<int>,greater<int>> _q;
//     for(int i=0;i<n;i++)
//     {
//         cin>>ret[i];
//         _q.push(ret[i]);
//     }
//     while(sum<k)
//     {
//         int temp=_q.top();
//         _q.pop();
//         sum+=temp;
//         if(sum>=k)break;
//         count++;
//         _q.push(temp*2);
//     }
//     cout<<count<<endl;
//     return 0;
// }

// int main()
// {
//     int t;cin>>t;
//     while(t--)
//     {
//         long long bill=0;
//         long long n,a,b;cin>>n>>a>>b;
//         if(n<=2)
//         {
//             cout<<min(a,b)<<endl;
//             continue;
//         }
//         if(3*a<2*b)
//         {
//             int temp=n/2,temp1=n%2;
//             bill=temp*a;
//             if(temp1==1)bill+=min(min(a,b),b-a);
//         }
//         else 
//         {
//             int temp=n/3,temp1=n%3;
//             bill=temp*b;
//             if(temp1==1)bill+=min(min(a,b),2*a-b);
//             if(temp1==2)bill+=min(min(a,b),3*a-b);
//         }
//         cout<<bill<<endl;
//     }
//     return 0;
// }

int main()
{
    string x;cin>>x;
    int n=x.size(),sum=0;
    vector<int> ret(n);
    for(int i=0;i<n;i++)
    {
        ret[i]=x[i]-'0';
        sum+=ret[i];
    }
    if(sum%2==1)
    {
        cout<<"No"<<endl;
        return 0;
    }
    //dp[i][j]表示从前i-1个位置中能找到和为j
    vector<vector<bool>> dp(n+1,vector<bool>(sum/2+1,0));
    dp[0][0]=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=sum/2;j++)
        {
            dp[i][j]=dp[i-1][j];//不选当前位置
            if(j>=ret[i-1])dp[i][j]=dp[i-1][j]||dp[i-1][j-ret[i-1]];//选择当前位置，有一个为真即可
        }
    }
    cout<<(dp[n][sum/2]==0?"No":"Yes")<<endl;
    return 0;
}